package com.spsa.vista.controladores;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;

import com.spsa.excepciones.ServicioException;
import com.spsa.negocio.servicios.ServicioTiendas;
import com.spsa.negocio.utilidades.SingletonDatos;
import com.spsa.persistencia.dao.TiendaDao;
import com.spsa.persistencia.entidades.Tienda;
import com.spsa.vista.utilidades.MensajesJSF;

@ManagedBean(name = "backTiendas")
@ViewScoped
public class ControladorTiendas {
	@EJB
	private SingletonDatos singletonDatos;
	private List<Tienda> tiendas;
	private List<Tienda> tiendasFiltradas;
	@EJB
	private ServicioTiendas servicioTiendas;
	@EJB
	private TiendaDao tiendaDao;
	private Tienda tiendaActual;
	
	@PostConstruct
	public void inicializar() {
		cargarDatosTiendas();
	}
	
	public void abrirDialogoModificar(Tienda tienda) {
		abrirDialogo(tienda);
	}
	
	private void abrirDialogo(Tienda tienda) {
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("tienda", tienda);

		Map<String, Object> options = new HashMap<String, Object>();
		options.put("modal", true);
		options.put("draggable", false);
		options.put("resizable", false);
		options.put("closable", false);
		options.put("contentHeight", 430);
		options.put("contentWidth", 620);
		RequestContext.getCurrentInstance().openDialog("crudTiendas", options, null);
	}
	
	public void modificarTienda(SelectEvent event) {
		if (event.getObject() == null)
			return;

		Tienda tienda = (Tienda) event.getObject();
		
		try {
			servicioTiendas.actualizar(tienda);
			cargarDatosTiendas();
			MensajesJSF.mostrarMensaje("Actualizar tienda", "Se actualizo los datos de la tienda");
		}
		catch(ServicioException e) {
			cargarDatosTiendas();
			MensajesJSF.mostrarError("Actualizar tienda", e.getMessage());
		}
	}
	
	public void abrirDialogoRegistrar() {
		abrirDialogo(null);
	}
	
	public void registrarTienda(SelectEvent event) {
		if (event.getObject() == null)
			return;

		Tienda tienda = (Tienda) event.getObject();
		
		try {
			servicioTiendas.registrar(tienda);
			cargarDatosTiendas();
			MensajesJSF.mostrarMensaje("Registrar tienda", "Se registro la tienda");
		}
		catch(ServicioException e) {
			MensajesJSF.mostrarError("Registrar tienda", e.getMessage());
		}
	}
	
	public void eliminarTienda() {
		try {
			servicioTiendas.eliminar(tiendaActual);
			cargarDatosTiendas();
			MensajesJSF.mostrarMensaje("Eliminar tienda", "Se elimino la tienda");
		}
		catch(ServicioException e) {
			MensajesJSF.mostrarError("Eliminar tienda", e.getMessage());
		}
	}
	
	private void cargarDatosTiendas() {
		tiendas = singletonDatos.getTiendas();
	}

	public List<Tienda> getTiendas() {
		return tiendas;
	}

	public void setTiendas(List<Tienda> tiendas) {
		this.tiendas = tiendas;
	}

	public Tienda getTiendaActual() {
		return tiendaActual;
	}

	public void setTiendaActual(Tienda tiendaActual) {
		this.tiendaActual = tiendaActual;
	}

	public List<Tienda> getTiendasFiltradas() {
		return tiendasFiltradas;
	}

	public void setTiendasFiltradas(List<Tienda> tiendasFiltradas) {
		this.tiendasFiltradas = tiendasFiltradas;
	}
}
